#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File   : a_coding.py
# @Email  : xuexia_xu@feidee.com
# @Time   : 2024/3/19 17:15
# @Desc   : 字符串&编码

# ASCII编码： 最早只有127个字符被编码到计算机里，也就是大小写英文字母、数字和一些符号
# ASCII编码和Unicode编码的区别：ASCII编码是1个字节，而Unicode编码通常是2个字节
# UTF-8编码：可变长编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节，
# 常用的英文字母被编码成1个字节，汉字通常是3个字节，只有很生僻的字符才会被编码成4-6个字节。


# 在计算机内存中，统一使用Unicode编码，当需要保存到硬盘或者需要传输的时候，就转换为UTF-8编码。

print('ABC'.encode('ascii'))
# 以Unicode表示的str通过encode()方法可以编码为指定的bytes
print('中文'.encode('utf-8'))
# print('中文'.encode('ascii'))
print(b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8', errors='ignore'))

# len()函数计算的是str的字符数，如果换成bytes，len()函数就计算字节数
print(len('ABC'))
print(len('中文'))

print(len(b'ABC'))
print(len('中文'.encode('utf-8')))

# 格式化

# 1. %方式
# 常见占位符 %d-整数 %f-浮点数 %s-字符串 %x-十六进制整数
print('Hi, %s, you have $%d.' % ('Michael', 1000000))

# 指定是否补0和整数与小数的位数
print('%5d-%02d' % (3, 5))
print('%.2f' % 3.1415926)

# 2.format()  它会用传入的参数依次替换字符串内的占位符{0}、{1}
print('Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125))
print('Hello, {0}, 成绩提升了 {1:10.1f}%'.format('小明', 17.125))

# 3.f-string
r = 2.5
s = 3.14 * r ** 2
print(f'The area of a circle with radius {r} is {s:.2f}')

s1 = 72
s2 = 85
r = (s2 - s1) / s1 * 100

print('%.1f%%' % r)
print(f'你好小明，你的成绩从72提升到了85你提升了{r:.1f}%'.format(r))
print(f'你好小明，你的成绩从72提升到了85你提升了{r:.1f}%')

